During the operation of a network storage system, data is typically stored on one or more disks of the storage system. A simple example of a network storage system configuration is illustrated in FIG. 1. A storage server 2 Å is coupled to a set of mass storage devices 4 and to a set of clients 1 through a network 3, such as a local area network (LAN). Each of the clients 1 may be, for example, a conventional personal computer (PC), workstation, or the like. The mass storage devices 4 may be, for example, conventional magnetic disks, optical disks such as CD-ROM or DVD based storage, magneto-optical (MO) storage, or any other type of non-volatile storage devices suitable for storing large quantities of data.
One method by which data is sometimes stored by a storage server, such as a file server, is to temporarily store (buffer) the data in main memory within the storage server before storing the data on a disk. The temporary storage of data in main memory, which is normally some form of random access memory (RAM), permits high speed access to the data. Periodically, during the operation of the storage system, the data buffered in main memory is stored to the disks of the storage system. Typically, the disks have a slower access rate than the main memory in the storage server. Thus, by providing fast access to data, the response time from data request to data delivery is short.
However, any storage system may experience various types of failure, such as a loss of power. Such failures can result in the inability to store or retrieve data. Depending on the cause, downtime can last for a few seconds or may last for longer periods of time, such as hours or days. When a failure such as loss of power occurs, data that was buffered in the main memory may not yet have been stored to the disks. Consequently, the data may be lost. This situation may cause data inconsistencies, because when the disks are accessed after the storage system recovers from the downtime, the data stored in the disks is not up to date.
In some storage systems, protection against such data loss is achieved by providing a non-volatile RAM (NVRAM) in the storage server in addition to its main memory. This NVRAM is used to store data only until the data can be stored on disk. To build an NVRAM, a battery can be attached to a conventional RAM to enable the RAM to continue to operate when the storage system experiences a loss of main power. However, the downtime can last for long periods of time. During these periods of time, the battery used to provide power for the NVRAM will discharge, possibly to a point where the battery fails to provide enough power, causing the data stored in the NVRAM to be lost. It is therefore desirable to reduce the risk of an NVRAM failing during a main power outage due to total battery discharge.
One solution is to calculate voltage curves of the battery, which are used during design time to predict the expected battery run time during discharge, e.g., in the event of a failure such as main power loss. The battery run time is the time remaining until the battery is fully discharged. This prediction is generally accurate when a battery is new, but as the battery ages this method is less accurate due to capacity loss from aging. One way to solve the capacity loss problem is to calculate during design time how much capacity is needed and make the battery large enough to survive a predetermined length of time (e.g. in years) even after capacity loss. However, this solution does not provide an accurate prediction of the “health” of the battery to determine remaining capacity of the battery. The “health” of the battery can be determined as a combination of the voltage, resistance, impedance and/or temperature of the battery.
Thus, what is needed is a solution that provides accurate prediction of the health of a battery to determine remaining capacity of the battery, particularly in the context of a battery used to power an NVRAM in a storage server.